package Basic;

public class demo04 {
    public static void main(String[] args) {
        /*
        数据类型的优先级从低到高：byte-> ->short ->char-> int -> long-> float-> double
        强制类型转换（要转换的类型）,从高优先级到低优先级才需要强制转换，从低到高不需要
             强制转换注意：
                 1、避免内存溢出 byte的内存范围是-128~127，128大于取值范围造成内存溢出了
                 2、存在精度问题
                        byte的取值范围为-128~127，占用1个字节（-2的7次方到2的7次方-1）
                        short的取值范围为-32768~32767，占用2个字节（-2的15次方到2的15次方-1）
                        int的取值范围为（-21_4748_3648~21_4748_3647），占用4个字节（-2的31次方到2的31次方-1）
                        long的取值范围为（-9223372036854774808~9223372036854774807），占用8个字节（-2的63次方到2的63次方-1）
         */
        int i=127;
        int a=128;
        byte b=(byte) a;
        byte c=(byte) i;
        System.out.println(a);
        System.out.println(b);
        System.out.println(i);
        System.out.println(c);
        System.out.println("========================================");
        int money=10_0000_0000;     //10亿 数字可以用下划线分割，"_"不会被输出
        System.out.println(money);
        int year=20;
        int total=money*year;       //注意整型的取值范围，内存溢出了。-2<sup>31</sup>.2<sup>31</sup>-1
        long  total1= money*year;    //无效，一样输出的是-14 7483 6480,total1在转换之前就已经溢出了
        long total2=money*(long)year;
        System.out.println(total);
        System.out.println(total1);
        System.out.println(total2);
    }
}
